#include <stdio.h>
#include <stdlib.h>
#include "cintwar.h"
#include "bool.h"

struct sCintWar
{
	FILE * f;
	Bool arr;
};

cintwar
cwa_create(void)
{
	cintwar cwa;

	cwa = (cintwar) malloc (sizeof(struct sCintWar));
	if (cwa != NULL)
	{
		cwa -> f = stdout;
		cwa -> arr = FALSE;
	}
	else
	{
		perror("No hay memoria para nueva cinta de escritura (cwa_create)");
		exit(EXIT_FAILURE);
	}
return cwa;
}

void
cwa_arr(cintwar cwa)
{
	if (cwa != NULL)
	{
		cwa->arr = TRUE;
		fprintf(cwa->f, "graph Gout{\n");
	}
	else
		printf("Warn: Se intento arrancar una cinta de escritura nula. La cinta permanece nula\n");
}

void
cwa_insarbol(cintwar cwa, Arista ar)
{
	Nodo n1,n2;
	int w;

	if (cwa == NULL || cwa->arr == FALSE)
		printf("Warn: Se intento insertar una arista desde una cinta nula o no arrancada; omitido\n");
	else if (ar!=NULL)
	{
		n1 = arista_fst(ar);
		n2 = arista_snd(ar);
		w = arista_weight(ar);
		fprintf(cwa->f, "%d -- %d [label=%d];\n", n1, n2, w);
	}
}

void
cwa_ainsrest(cintwar cwa, Arista ar)
{
	Nodo n1,n2;
	int w;

	if (cwa == NULL || cwa->arr == FALSE)
		printf("Warn: Se intento insertar una arista desde una cinta nula o no arrancada; omitido\n");
	else if (ar!=NULL)
	{
		n1 = arista_fst(ar);
		n2 = arista_snd(ar);
		w = arista_weight(ar);
		fprintf(cwa->f, "%d -- %d [label=%d,style=dotted];\n", n1, n2, w);
	}
}

cintwar
cwa_destroy(cintwar cwa)
{
	if (cwa!=NULL)
	{
		fprintf(cwa->f, "}\n");
		free(cwa);
		cwa = NULL;
	}
return cwa;
}
	